package com.kyrie.redis;
//
//import java.net.UnknownHostException;
//import java.util.HashSet;
//import java.util.Set;
//
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.data.redis.connection.RedisConnectionFactory;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
//import org.springframework.data.redis.serializer.StringRedisSerializer;
//import com.fasterxml.jackson.annotation.JsonAutoDetect;
//import com.fasterxml.jackson.annotation.PropertyAccessor;
//import com.fasterxml.jackson.databind.ObjectMapper;
///**
// * redis配置类--单机版
// */
////@Configuration
////public class RedisConfig {
////	
////    @Bean(name="interfaceRedisTemplate")
////    @SuppressWarnings("all")
////    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
////        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
////        template.setConnectionFactory(factory);
////        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
////        ObjectMapper om = new ObjectMapper();
////        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
////        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
////        jackson2JsonRedisSerializer.setObjectMapper(om);
////        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
////        // key采用String的序列化方式
////        template.setKeySerializer(stringRedisSerializer);
////        // hash的key也采用String的序列化方式
////        template.setHashKeySerializer(stringRedisSerializer);
////        // value序列化方式采用jackson
////        template.setValueSerializer(jackson2JsonRedisSerializer);
////        // hash的value序列化方式采用jackson
////        template.setHashValueSerializer(jackson2JsonRedisSerializer);
////        template.afterPropertiesSet();
////        return template;
////    }
////}
//
//import redis.clients.jedis.HostAndPort;
//import redis.clients.jedis.JedisCluster;
//import redis.clients.jedis.JedisPoolConfig;
//
///**
// * redis-集群配置
// */
//@Configuration
//@ConditionalOnClass({JedisCluster.class})
//public class RedisConfig {
//    @Value("${spring.redis.cluster.nodes}")
//    private String clusterNodes;
//    @Value("${spring.redis.timeout}")
//    private int timeout;
//    @Value("${spring.redis.pool.max-idle}")
//    private int maxIdle;
//    @Value("${spring.redis.pool.max-wait}")
//    private long maxWaitMillis;
//    @Value("${spring.redis.commandTimeout}")
//    private int commandTimeout;
//    
//    @Value("${spring.redis.password}")
//    private String password;
//    
//    // 出现异常最大重试次数
//    private static int maxAttempts = 3;
//    
//    // 返回值的超时时间
//    private static int soTimeout = 5000;
//    
//    @Bean
//    public JedisCluster getJedisCluster() {
//        String[] cNodes = clusterNodes.split(",");
//        Set<HostAndPort> nodes =new HashSet<>();
//        //分割出集群节点
//        for(String node : cNodes) {
//            String[] hp = node.split(":");
//            nodes.add(new HostAndPort(hp[0],Integer.parseInt(hp[1])));
//        }
//        JedisPoolConfig jedisPoolConfig =new JedisPoolConfig();
//        jedisPoolConfig.setMaxIdle(maxIdle);
//        jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
//        
//        //创建集群对象
////      JedisCluster jedisCluster = new JedisCluster(nodes,commandTimeout);
//        // return new JedisCluster(nodes,commandTimeout,jedisPoolConfig);
//        
//        return new JedisCluster(nodes, commandTimeout, soTimeout, maxAttempts, password, jedisPoolConfig);
//    }
// 
//    /**
//     * 设置数据存入redis 的序列化方式
//     *</br>redisTemplate序列化默认使用的jdkSerializeable,存储二进制字节码,导致key会出现乱码，所以自定义
//     *序列化类
//     *
//     * @paramredisConnectionFactory
//     */
//    @Bean(name="interfaceRedisTemplate")
//    public RedisTemplate<Object,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
//        RedisTemplate<Object,Object> redisTemplate = new RedisTemplate<>();
//        redisTemplate.setConnectionFactory(redisConnectionFactory);
//        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer =new Jackson2JsonRedisSerializer(Object.class);
//        ObjectMapper objectMapper =new ObjectMapper();
//        objectMapper.setVisibility(PropertyAccessor.ALL,JsonAutoDetect.Visibility.ANY);
//        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
//        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
// 
//        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
//        redisTemplate.setKeySerializer(new StringRedisSerializer());
// 
//        redisTemplate.afterPropertiesSet();
// 
//        return redisTemplate;
//    }
// 
//}
